Python openpyxl模块常用方法与属性【一篇就够了】

您所在的位置:网站首页 python 3x版本如何使用openpyxl将列表按列写入已有的xlsx Python openpyxl模块常用方法与属性【一篇就够了】

Python openpyxl模块常用方法与属性【一篇就够了】

2023-07-17 18:59| 来源: 网络整理| 查看: 265

1. load_workbook()

load_workbook()函数接受文件名,返回一个 workbook 数据类型的值。这个 workbook 对象代表这个 Excel 文件,有点类似 File 对象代表一个打开的文本文件。

>>> import openpyxl >>> wb = openpyxl.load_workbook('example.xlsx') >>> type(wb) 2. get_sheet_names()

可以取得工作簿中所有表名的列表

>>> import openpyxl >>> wb = openpyxl.load_workbook('example.xlsx') >>> wb.get_sheet_names() ['Sheet1', 'Sheet2', 'Sheet3'] 3. get_sheet_by_name()

每个表由一个 Worksheet 对象表示,可以通过向工作簿方法 get_sheet_by_name()传递表名字符串获得。

>>> sheet = wb.get_sheet_by_name('Sheet3') >>> sheet 4. 属性:active

取得工作簿的活动表。活动表是工作簿在 Excel 中打开时出现的工作表。在取得 Worksheet对象后,可以通过 title 属性取得它的名称。

>>> anotherSheet = wb.active >>> anotherSheet.title '城市交通连通性' 5. 对象:cell >>> import openpyxl >>> wb = openpyxl.load_workbook('example.xlsx') >>> sheet = wb.get_sheet_by_name('Sheet1') >>> sheet['A1'] >>> sheet['A1'].value datetime.datetime(2015, 4, 5, 13, 34, 2) >>> print(sheet['A1'].value) 2015-04-05 13:34:02 >>> c = sheet['B1'] >>> c.value 'Apples' >>> 'Row ' + str(c.row) + ', Column ' + str(c.column) + ' is ' + c.value 'Row 1, Column 2 is Apples' >>> 'Cell ' + c.coordinate + ' is ' + c.value 'Cell B1 is Apples' >>> sheet['C1'].value 73 row:cell对象的行column:cell对象的列coordinate:cell对象的位置信息 6. cell()

调用表的cell方法时,可以传入整数作为 row 和 column 关键字参数,也可以得到一个单元格。第一行或第一列的整数是 1,不是 0。

>>> sheet.cell(row=1, column=2) >>> sheet.cell(row=1, column=2).value 'Apples' >>> for i in range(1, 8, 2): print(i, sheet.cell(row=i, column=2).value) 1 Apples 3 Pears 5 Apples 7 Strawberries 7. 属性:max_row和max_column >>> sheet.max_row 7 >>> sheet.max_column 3 8. column_index_from_string() >>> from openpyxl.utils import get_column_letter, column_index_from_string >>> column_index_from_string('AA') 27 9. get_column_letter() >>> get_column_letter(1) 'A' >>> get_column_letter(900) 'AHP' >>> wb = openpyxl.load_workbook('example.xlsx') >>> sheet = wb.get_sheet_by_name('Sheet1') >>> get_column_letter(sheet.max_column) 'C' 10. Worksheet 对象切片操作

取得电子表格中一行、一列或一个矩形区域中的所有Cell 对象。然后可以循环遍历这个切片中的所有单元格。

>>> import openpyxl >>> wb = openpyxl.load_workbook('example.xlsx') >>> sheet = wb.get_sheet_by_name('Sheet1') >>> tuple(sheet['A1':'C3']) ((, , ), (, , ), (, , )) >>> sheet['A1':'C3'] ((, , ), (, , ), (, , )) >>> for rowOfCellObjects in sheet['A1':'C3']: for cellObj in rowOfCellObjects: print(cellObj.coordinate, cellObj.value) print('--- END OF ROW ---') A1 2015-04-05 13:34:02 B1 Apples C1 73 --- END OF ROW --- A2 2015-04-05 03:41:23 B2 Cherries C2 85 --- END OF ROW --- A3 2015-04-06 12:46:51 B3 Pears C3 14 --- END OF ROW ---

这个元组包含 3 个元组:每个元组代表 1 行,从指定区域的顶部到底部。这 3个内部元组中的每一个包含指定区域中一行的 Cell 对象,从最左边的单元格到最右边。所以总的来说,工作表的这个切片包含了从 A1 到 C3 区域的所有 Cell 对象,从左上角的单元格开始,到右下角的单元格结束。

11. 属性:columns 和 rows

sheet.columns 和 sheet.rows 是 generator

for cellObj in list(sheet.columns)[1]: print(cellObj.value) Apples Cherries Pears Oranges Apples Bananas Strawberries 12. Workbook() >>> import openpyxl >>> wb = openpyxl.Workbook() >>> wb.get_sheet_names() ['Sheet'] 13. 保存:save()

当修改Workbook 对象或它的工作表和单元格时,电子表格文件不会保存,除非你调用 save()工作簿方法。

>>> import openpyxl >>> wb = openpyxl.load_workbook('example.xlsx') >>> sheet = wb.get_active_sheet() >>> sheet.title = 'Spam Spam Spam' >>> wb.save('example_copy.xlsx')

这里,我们改变了工作表的名称。为了保存变更,我们将文件名作为字符串传递给save()方法。传入的文件名与最初的文件名不同,例如’example_copy.xlsx’,这将变更保存到电子表格的一份拷贝中。 当你编辑从文件中加载的一个电子表格时,总是应该将新的、编辑过的电子表格保存到不同的文件名中。这样,如果代码中有缺陷,导致新的保存到文件中数据不对或讹误,还有最初的电子表格文件可以处理。 补充: 有时候调用 save函数时报错如下:

>>> wb.save('styled.xlsx') Traceback (most recent call last): File "", line 1, in File "G:python36libsite-packagesopenpyxlworkbookworkbook.py", line 396, in save save_workbook(self, filename) File "G:python36libsite-packagesopenpyxlwriterexcel.py", line 292, in save_workbook archive = ZipFile(filename, 'w', ZIP_DEFLATED, allowZip64=True) File "G:python36libzipfile.py", line 1090, in __init__ self.fp = io.open(file, filemode) PermissionError: [Errno 13] Permission denied: 'styled.xlsx'

解决:关闭打开的 excel 文档

14. 创建表格:create_sheet() >>> import openpyxl >>> wb = openpyxl.Workbook() >>> wb.get_sheet_names() ['Sheet'] >>> wb.create_sheet() >>> wb.get_sheet_names() ['Sheet', 'Sheet1'] >>> wb.create_sheet(index=0, title='First Sheet') >>> wb.get_sheet_names() ['First Sheet', 'Sheet', 'Sheet1'] >>> wb.create_sheet(index=2, title='Middle Sheet') >>> wb.get_sheet_names() ['First Sheet', 'Sheet', 'Middle Sheet', 'Sheet1']

create_sheet()方法返回一个新的 Worksheet 对象,名为 SheetX,它默认是工作簿的最后一个工作表。或者,可以利用 index 和 title 关键字参数,指定新工作表的索引或名称。

>>> wb.create_sheet(index=0, title='First Sheet') >>> wb.get_sheet_names() ['First Sheet', 'Sheet', 'Sheet1'] >>> wb.get_active_sheet() >>> wb.create_sheet(index=0, title='new First Sheet') >>> wb.get_sheet_names() ['new First Sheet', 'First Sheet', 'Sheet', 'Sheet1'] >>> wb.get_active_sheet() 15. 删除表格:remove_sheet() >>> wb.get_sheet_names() ['new First Sheet', 'First Sheet', 'Sheet', 'Sheet1'] >>> wb.remove(wb.get_sheet_by_name('new First Sheet')) >>> wb.remove(wb.get_sheet_by_name('Sheet1')) >>> wb.get_sheet_names() ['First Sheet', 'Sheet']

remove_sheet()方法接受一个 Worksheet 对象作为其参数,而不是工作表名称的字符串。如果你只知道要删除的工作表的名称,就调用get_sheet_by_name(),将它的返回值传入 remove_sheet()。 在工作簿中添加或删除工作表之后,记得调用save()方法来保存变更。

16. 将值写入单元格 >>> import openpyxl >>> wb = openpyxl.Workbook() >>> sheet = wb.get_sheet_by_name('Sheet') >>> sheet['A1'] = 'Hello world!' >>> sheet['A1'].value 'Hello world!' 17. add_image()

单元格中插入图片

from openpyxl.drawing.image import Image img_file = ".//images//1.jpg" img = Image(img_file) sheet.column_dimensions['B'].width = 15.0 sheet.row_dimensions[row].height = 80 img.width = 100.0 img.height = 100.0 sheet.add_image(img, 'B{}'.format(row))

注意:这里的Image是从openpyxl.drawing.image导入的,不是PIL



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3